package thread;

import java.util.Scanner;

public class demo18 {

//    //i无法正确读取
    public static int i = 0;
//    public volatile static int i = 0;
    public static void main(String[] args) {
        Thread t1 = new Thread(()->{
           while (i == 0){
                //不加volatile 有些代码结构下也可以运行
               try {
                   Thread.sleep(1000);
               } catch (InterruptedException e) {
                   throw new RuntimeException(e);
               }
               //加了sleep之后while循环执行速度就慢了，由于次数少了，load操作的开销就不大了，因此就没必要优化了
               //没有触发load的优化，也就没有触发内存可见性问题了

               //代码啥时候有优化，啥时候没有优化，说不清楚
               //使用volatile是最靠谱的
           }
            System.out.println("t1 end");
        });
        t1.start();
        Thread t2 = new Thread(()->{
            System.out.println("请输入i: ");
            Scanner scanner = new Scanner(System.in);
            i = scanner.nextInt();
        });
        t2.start();

    }
}
